﻿//using Common;
//using Common.OracleCommon;
//using Newtonsoft.Json;
//using Newtonsoft.Json.Linq;
//using Oracle.DataAccess.Client;
//using System;
//using System.Data;
//using System.Data.SqlClient;
//using System.Diagnostics;
//using System.Linq;
//using System.Security.Cryptography;
//using System.ServiceModel;
//using System.Text;
//using System.Threading;
//using System.Windows.Forms;
//using System.Xml.Linq;

//namespace Juqent.LCBS
//{
//    public partial class FrmTest : Form
//    {
//        private UserManager _user = UserManager.Instance;
//        private QueryManager _qry = QueryManager.Instance;
//        private StockInManager _si = StockInManager.Instance;
//        private StockOutManager _so = StockOutManager.Instance;
//        private System.Timers.Timer _timerModifyErpBin = null;    //更新ERP库位的定时器

//        public delegate void AddToMemoEditCallback(string text);
//        private delegate void SetValueHandle(Control ctrl, string value);
//        private DBOperator _db = DBOperator.Instance;
//        private ServiceHost _host = new ServiceHost(typeof(MWService)); // WCF服务控制
//        private string _token = "";
//        private string _curUser = "it002";

//        public FrmTest()
//        {
//            InitializeComponent();
//        }

//        private void Form1_Load(object sender, EventArgs e)
//        {
//            //DBOperator.Instance.ShowLogDelegate = new ShowLogDelegate(ShowLog);
//            Helper.ShowLogFunc = new ShowLogDelegate(ShowLog);
//            tabControl1.SelectedIndex = 6;
//            cmbBillType.SelectedIndex = 0;

//            _timerModifyErpBin =
//                new System.Timers.Timer(2000);
//            _timerModifyErpBin.Elapsed += new System.Timers.ElapsedEventHandler(ModifyErpBin_Tick);
//            _timerModifyErpBin.Enabled = false;
//        }

//        public void ModifyErpBin_Tick(object sender, System.Timers.ElapsedEventArgs e)
//        {
//            BinManager bm = BinManager.Instance;
//            if (!bm.ReadConfig())
//            {
//                // TODO 日志
//                return;
//            }

//            System.Timers.Timer timer = (System.Timers.Timer)sender;
//            timer.Enabled = bm.Enabled;
//            timer.Interval = bm.Interval * 1000;
//            if (timer.Enabled == false)
//                return;
//            timer.Enabled = false;
//            BinManager.Instance.CheckAndModifyErpBin();
//            timer.Enabled = true;
//        }

//        /// <summary>
//        /// 用于初始化启动
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private void timer1_Tick(object sender, EventArgs e)
//        {
//            _user.LoadToken();//加载令牌

//            timer1.Enabled = false;

//            // ShowLog("连接ERP,参数初始化-帐套:" + ErpOperator.Instance.AccDBName);
//            Helper.Log(LogType.Debug, "连接ERP,参数初始化-帐套:" + ErpOperator.Instance.AccDBName);

//            //bool ret = ErpOperator.Instance.InitPara();

//            ShowLog("ERP参数初始化成功");

//            btnStart_Click(null, null);
//        }

//        // 启动WCF服务
//        private void btnStart_Click(object sender, EventArgs e)
//        {
//            bool ret = true;
//            bool wcfEnabled = Properties.Settings.Default.WcfEnabled;
//            if (wcfEnabled)
//            {
//                ret = HostOpen();
//            }
//            btnStart.Enabled = !ret;
//            //    groupBox1.Enabled = ret;
//        }

//        // 启动WCF服务
//        bool HostOpen()
//        {
//            try
//            {
//                _host = new ServiceHost(typeof(MWService));
//                _host.Open();
//                string msg = "启动WCF服务:" + _host.BaseAddresses[0].ToString();
//                Helper.Log(LogType.Info, msg);
//                //ShowLog(msg);
//                return true;
//            }
//            catch (Exception ex)
//            {
//                string msg = "启动WCF服务失败:" + ex.Message;
//                Helper.Log(LogType.Fatal, msg);
//                //ShowLog(msg);
//                _host = null;
//                return false;
//            }
//        }

//        #region 日志和状态显示

//        // 添加txtLog日志
//        public void ShowLog(string msg)
//        {
//            try
//            {
//                if (InvokeRequired)
//                {
//                    object[] pList = { msg };
//                    txtLog.Invoke(new AddToMemoEditCallback(AddToTextBox), pList);
//                }
//                else
//                {
//                    AddToTextBox(msg);
//                }
//            }
//            catch (System.Exception ex)
//            {
//                Debug.WriteLine(ex.ToString());
//                return;
//            }
//        }

//        // --添加日志(只能主界面线程调用)
//        private void AddToTextBox(string msg)
//        {
//#if HARRY_DEBUG
//            string strNewData = "[" + DateTime.Now.ToString("HH:mm:ss.fff") + "]: ";
//            strNewData += msg + "\r\n";
//            txtLog.Text += strNewData;
//            txtLog.SelectionStart = txtLog.Text.Length;

//            txtLog.ScrollToCaret();
//            txtLog.Update();
//#endif
//        }


//        // --设置控件text属性(只能主界面线程调用)
//        private void SetValueMethod(Control ctrl, string value)
//        {
//            ctrl.Text = value;
//        }

//        // 设置控件text属性
//        public void SetValue(Control ctrl, string value)
//        {
//            try
//            {
//                if (this.InvokeRequired)
//                {
//                    SetValueHandle handle = new SetValueHandle(SetValueMethod);
//                    this.BeginInvoke(handle, ctrl, value);
//                }
//                else
//                {
//                    SetValueMethod(ctrl, value);
//                }
//            }
//            catch (System.Exception ex)
//            {
//                Debug.WriteLine(ex.ToString());
//                return;
//            }
//        }

//        #endregion

//        // 退出
//        private void btnExit_Click(object sender, EventArgs e)
//        {
//            Close();
//        }

//        // 停止
//        private void btnStopAll_Click(object sender, EventArgs e)
//        {
//            if (_host != null)
//            {
//                _host.Close();
//                string msg = "停止WCF服务";
//                Helper.Log(LogType.Info, msg);
//                //ShowLog(msg);
//            }

//            //groupBox1.Enabled = false;
//            btnStart.Enabled = true;
//        }

//        // 退出前处理
//        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
//        {
//            if (_host != null)
//            {
//                _host.Close();
//            }
//            _user.SaveToken();

//            int tick = Environment.TickCount;
//            while (Environment.TickCount - tick < 500)
//            {
//                Application.DoEvents();
//                Thread.Sleep(10);
//            }
//        }

//        // 数据库连接测试
//        private void btnTestDB_Click(object sender, EventArgs e)
//        {
//            string time = "";
//            string dbStr = Properties.Settings.Default.WmsDB;
//            string dbName = "";
//            string dbUId = "";
//            string[] strs = dbStr.Split(';');
//            foreach (string str in strs)
//            {
//                if (str.Contains("Data Source="))
//                {
//                    string[] strss = str.Split('=');
//                    if (strss.Length > 1)
//                        dbName = strss[1];
//                }
//                if (str.Contains("User Id="))
//                {
//                    string[] strss = str.Split('=');
//                    if (strss.Length > 1)
//                        dbUId = strss[1];
//                }
//            }
//            ShowLog("开始测试连接-ORACLEDB(" + dbName + "-" + dbUId + ")");
//            if (DBOperator.Instance.DBTest(ref time))
//            {
//                ShowLog("连接成功-ORACLE服务器时间:" + time);
//            }
//            else
//            {
//                ShowLog("连接失败");
//            }
//        }

//        private void btnTestDBSql_Click(object sender, EventArgs e)
//        {
//            string time = "";
//            string ip = "";
//            string dbName = Properties.Settings.Default.ErpDB;
//            string[] strs = dbName.Split(';');
//            foreach (string str in strs)
//            {
//                if (str.Contains("Data Source="))
//                {
//                    string[] strss = str.Split('=');
//                    if (strss.Length > 1)
//                        ip = strss[1];
//                }
//                if (str.Contains("Catalog="))
//                {
//                    string[] strss = str.Split('=');
//                    if (strss.Length > 1)
//                        dbName = strss[1];
//                }
//            }

//            ShowLog("开始测试连接-ERPDB(" + dbName + ")");
//            if (ErpOperator.Instance.DBTest(ref time))
//            {
//                ShowLog("连接成功-ERP服务器时间:" + time);
//            }
//            else
//            {
//                ShowLog("连接失败");
//            }
//        }

//        // 获取服务器状态
//        private void btnGetServerInfo_Click(object sender, EventArgs e)
//        {
//            ShowLog("获取服务器信息");
//            int userCnt = _user.TokenTable.Count;
//            DataTable table = new DataTable("t");
//            table.Columns.Add("UserCnt");
//            table.Rows.Add(userCnt.ToString());
//            dataGridView1.DataSource = table;
//        }

//        #region 用户权限
//        // 登录
//        private void btnLogin_Click(object sender, EventArgs e)
//        {
//            MD5 md5 = new MD5CryptoServiceProvider();
//            byte[] data = Encoding.Default.GetBytes(txtPwd.Text.Trim());
//            byte[] res = md5.ComputeHash(data, 0, data.Length);
//            string pwd = (BitConverter.ToString(res)).Replace("-", "");
//            _user.Login(txtUser.Text, pwd, 99, "TEST", ref _token);
//        }

//        // 获取当前登录用户信息
//        private void btnGetUserInfo_Click(object sender, EventArgs e)
//        {
//            DataTable dt = _user.GetUserInfo(_token);
//            if (dt == null)
//            {
//                ShowLog("用户未登录或token已失效");
//            }
//            dataGridView1.DataSource = dt;
//        }

//        // 退出登录
//        private void btnLogout_Click(object sender, EventArgs e)
//        {
//            _user.Logout(_token);
//        }

//        // 获取功能权限列表
//        private void btnGetFunctions_Click(object sender, EventArgs e)
//        {
//            DataTable dt = _user.GetFunctionList(_token);
//            if (dt == null)
//            {
//                ShowLog("用户未登录或token已失效");
//            }
//            dataGridView1.DataSource = dt;
//        }

//        #endregion

//        #region 查询相关
//        private void btnGetSPInfo_Click(object sender, EventArgs e)
//        {
//            string sn = cmbSPSN.Text;
//            ShowLog("查询半成品SN:" + sn);
//            DataTable dt = _qry.GetSPInfo(sn);
//            //DataTable dt = _qry.GetSPInfoScrap(sn);
//            ShowLog(dt == null ? "半成品SN不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetProInfo_Click(object sender, EventArgs e)
//        {
//            string sn = cmbProSN.Text;
//            ShowLog("查询成品SN:" + sn);
//            DataTable dt = _qry.GetProInfo(sn);
//            ShowLog(dt == null ? "成品SN不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetBoxSum_Click(object sender, EventArgs e)
//        {
//            string id = cmbBoxID.Text;
//            ShowLog("查询周装箱汇总:" + id);
//            DataTable dt = _qry.GetBoxSum(id);
//            ShowLog(dt == null ? "周装箱ID不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetBoxDetail_Click(object sender, EventArgs e)
//        {
//            string id = cmbBoxID.Text;
//            ShowLog("查询周装箱明细:" + id);
//            DataTable dt = _qry.GetBoxDetail(id);
//            ShowLog(dt == null ? "周装箱ID不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetPlateSum_Click(object sender, EventArgs e)
//        {
//            string id = cmbPlateID.Text;
//            ShowLog("查询栈板汇总:" + id);
//            DataTable dt = _qry.GetPlateSum(id);
//            ShowLog(dt == null ? "栈板ID不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetPlateDetail_Click(object sender, EventArgs e)
//        {
//            string id = cmbPlateID.Text;
//            ShowLog("查询栈板明细:" + id);
//            DataTable dt = _qry.GetPlateDetail(id);
//            ShowLog(dt == null ? "栈板ID不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetBinSPAllType_Click(object sender, EventArgs e)
//        {
//            string id = cmbBinSPID.Text;
//            ShowLog("查询库位类型汇总:" + id);
//            DataTable dt = _qry.GetBinSPAllBox(id);
//            ShowLog(dt == null ? "库位不存在产品" : "返回结果:" + dt.Rows.Count);
//            if (dt == null)
//                return;
//            //ShowLog("查询库位类型汇总");
//            var list1 = dt.AsEnumerable().
//                GroupBy(n => new
//                {
//                    CODE = n.Field<string>("CODE"),
//                    NAME = n.Field<string>("NAME"),
//                    MODEL = n.Field<string>("MODEL"),
//                    WORKNO = n.Field<string>("WORKNO")
//                }).
//                Select(n =>
//                {
//                    return new
//                    {
//                        物料编码 = n.Key.CODE,
//                        数量 = n.Select(c => c.Field<Decimal>("CNT")).Sum(),
//                        型号 = n.Key.MODEL,
//                        名称 = n.Key.NAME,
//                        工单号 = n.Key.WORKNO
//                    };
//                });
//            dataGridView1.DataSource = Helper.CopyToDataTable(list1);
//            //ShowLog("查询库位类型汇总完成");
//        }

//        private void btnGetBinSPSum_Click(object sender, EventArgs e)
//        {
//            //string id = cmbBinSPID.Text;
//            //ShowLog("查询库位汇总:" + id);
//            //DataTable dt = _qry.GetBinSPSum(id);
//            //ShowLog(dt == null ? "半成品库位ID不存在" : "返回结果:" + dt.Rows.Count);
//            //dataGridView1.DataSource = dt;
//        }

//        private void btnGetBinSPBox_Click(object sender, EventArgs e)
//        {
//            string id = cmbBinSPID.Text;
//            ShowLog("查询库位周装箱明细:" + id);
//            DataTable dt = _qry.GetBinSPAllBox(id);
//            ShowLog(dt == null ? "半成品库位 不存在产品" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnGetBinPro_Click(object sender, EventArgs e)
//        {
//            string id = cmbBinProID.Text;
//            ShowLog("查询库位成品明细:" + id);
//            DataTable dt = _qry.GetBinProAll(id);
//            ShowLog(dt == null ? "成品库位 不存在产品" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }
//        #endregion

//        #region 出入库

//        //查询ERP单据
//        private void btnGetSIProBill_Click(object sender, EventArgs e)
//        {
//            string cond = txtSICond.Text;
//            ShowLog("查询:" + cmbBillType.Text);
//            DataTable dt = null;
//            switch (cmbBillType.Text)
//            {
//                case "半成品入库单":
//                    dt = _si.GetSIBoard(cond);
//                    break;
//                case "成品入库单":
//                    dt = _si.GetSIPro(cond);
//                    break;
//                case "其他入库单":
//                    dt = _si.GetSInOther(cond);
//                    break;
//                case "销售出库单":
//                    dt = _so.GetSOProduct(cond);
//                    break;
//                case "其他出库单":
//                    dt = _so.GetSOOther(cond);
//                    break;
//                case "半成品材料出库单":
//                case "成品材料出库单":
//                    dt = _so.GetSOMater(cond);
//                    break;
//            }

//            ShowLog(dt == null ? "数据库故障或参数错误" : "Total:" + dt.ExtendedProperties["Total"]);
//            dataGridView1.DataSource = dt;
//        }
//        //SMT清点--入
//        private void btnSInCheckSMT_Click(object sender, EventArgs e)
//        {
//            DataTable dt = new DataTable("SInCheckSMT");
//            dt.ExtendedProperties.Add("AutoID", "431639026");
//            dt.ExtendedProperties.Add("WH", "206");
//            dt.Columns.Add("SN");
//            //for (int i = 1; i <= 10; i++)
//            //{
//            //    dt.Rows.Add(string.Format("M1S01-000001130700{0:d02}", i));
//            //}
//            dt.Rows.Add("M2S01-00000213080001");
//            //dt.Rows.Add("M1S01-00000113070001");
//            //dt.Rows.Add("M1S01-00000113070002");
//            //dt.Rows.Add("M1S01-00000113070003");
//            ShowLog("SMT入库清点:" + dt.ExtendedProperties["AutoID"] + ":" + dt.Rows.Count);
//            string user = "FormTest";
//            string errCode = _si.SInCheckBoard(dt, user);
//            ShowLog(errCode == null ? "SMT入库清点成功" : "SMT入库清点故障代码:" + errCode);
//        }
//        private void btnSInUpPro_Click(object sender, EventArgs e)
//        {
//            BLLCommon bll = new BLLCommon();
//            OracleTransaction tranOra = DbHelperOra.BeginTransaction();
//            DataTable dt = new DataTable("matstockup");
//            dt.Columns.Add("sn");
//            dt.Columns.Add("bin");
//            dt.Rows.Add("000119081000003", "8888");
//            ShowLog("成品入库上架:");
//            DataTable dts = new DataTable();
//            // bll.QueryMatBCInfo("000119081000003", ref dts);
//            string[] result = bll.MatStockUp1(tranOra, dt, "admin", "761", "123456", "采购入库");
//            ShowLog(result[0] == "OK" ? "上架成功" : "上架失败:" + result[1]);
//        }
//        /// <summary>
//        /// 取消备料（聚维）
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private void btnTestSIn1_Click(object sender, EventArgs e)
//        {
//            BLLCommon bllcommon = new BLLCommon();
//            BLLMOPickSave bllMOPickSave = new BLLMOPickSave();
//            string curUser = "张武东";
//            try
//            {

//                string matBC = txbBarcodeID.Text.Trim();
//                Helper.Log(LogType.Info, string.Format("用户{0} 取消备料清点，条码：{1} ", curUser, matBC));

//                #region 1-获取条码备料信息
//                DataTable dt = new DataTable("BC");
//                string queryPrepareInfo = string.Format(@"select a.pick_user, a.barcode_id,a.allocateid,a.stock_qty,a.bill_no,a.outccode,a.whcode,b.bin_code from stock_record  a left join  receive_record  b on a.barcode_id=b.barcode_id 
//where a.barcode_id='{0}'", matBC);

//                DataTable dtPrepareInfo = DbHelperOra.QueryFirstTable(queryPrepareInfo);

//                if (dtPrepareInfo == null || dtPrepareInfo.Rows.Count <= 0)
//                {
//                    MessageBox.Show("未找到备料记录！请扫描备料的条码！");
//                    return;
//                }
//                #endregion
//                #region 2-验证备料数量和备料人
//                //优化性能
//                //2-提取备料明细，目的是验证备料完成以后有人取消备料
//                string entryIDs = "";
//                for (int i = 0; i < dtPrepareInfo.Rows.Count; i++)
//                {

//                    if (entryIDs == "")
//                    {
//                        entryIDs = "'" + dtPrepareInfo.Rows[i]["allocateid"].ToString() + "'";
//                    }
//                    else
//                    {
//                        entryIDs += ",'" + dtPrepareInfo.Rows[i]["allocateid"].ToString() + "'";
//                    }
//                }
//                //获取备料人
//                curUser = dtPrepareInfo.Rows[0]["pick_user"].ToString();
//                string sql = string.Format(@"select 
//               isnull(a.Define30,0) as Define30,a.Define33 ,Mocode,a.AllocateId from v_mom_moallocate a 
//                left join v_mom_orderdetail b on b.modid=a.modid 
//                where a.AllocateId in({0})", entryIDs);
//                DataTable dtPrepareDetail = SqlDBHelper.Query(sql);
//                //如果没有找到明细
//                if (dtPrepareDetail == null || dtPrepareDetail.Rows.Count < 1)
//                {
//                    MessageBox.Show("ERP中不存在子件ID" + entryIDs);
//                    return;
//                }
//                for (int i = 0; i < dtPrepareDetail.Rows.Count; i++)
//                {
//                    string historyUser = dtPrepareDetail.Rows[i]["Define33"].ToString();
//                    if (!String.IsNullOrEmpty(historyUser))
//                    {
//                        if (historyUser != curUser)
//                        {
//                            MessageBox.Show(string.Format("用户{0}备的料，只允许自己取消自己的备料！", historyUser));
//                            return;
//                        }
//                    }
//                }

//                #endregion
//                #region 3-取消备料
//                //3-取消备料
//                SqlTransaction tran = SqlDBHelper.BeginTransaction();
//                OracleTransaction tranOra = DbHelperOra.BeginTransaction();
//                try
//                {
//                    string[] ret = null;
//                    for (int i = 0; i < dtPrepareDetail.Rows.Count; i++)
//                    {
//                        string AllocateId = dtPrepareDetail.Rows[i]["AllocateId"].ToString();//子件行号
//                        double checkQTY = dtPrepareDetail.Rows[i]["Define30"].ToString() == "" ? 0 : double.Parse(dtPrepareDetail.Rows[i]["Define30"].ToString());  //已清点数
//                        string Mocode = dtPrepareDetail.Rows[i]["Mocode"].ToString();//生产订单
//                        DataRow[] dr = dtPrepareInfo.Select("allocateid='" + AllocateId + "'");
//                        double prepareQty = double.Parse(dr[0]["stock_qty"].ToString());
//                        double cancelqty = prepareQty;
//                        //取消备料数量-备料数量<0,那么就将备料数量改为0
//                        if (prepareQty > checkQTY)
//                            cancelqty = checkQTY;
//                        //本次清点数<=当前行未备料数 那么就将清点数量全部加在这一行，否则就将多余的放在下一行中                     
//                        ret = bllMOPickSave.BOMPickSave(tran, AllocateId, checkQTY - cancelqty, curUser);//清点数=已清点-本次取消数
//                        if (ret[0] != "OK")
//                        {
//                            tran.Rollback();
//                            tranOra.Rollback();
//                            Helper.Log(LogType.Info, string.Format("用户{0} 取消备料失败！清空清点数据失败，原因：{1}", curUser, ret[0]));
//                            MessageBox.Show("取消备料失败！原因：" + ret[0]);
//                            return;

//                        }
//                    }
//                    //条码上架
//                    if (ret[0] == "OK")
//                    {
//                        DataTable sndt = new DataTable();
//                        sndt.Columns.Add("sn", typeof(string));
//                        sndt.Columns.Add("bin", typeof(string));
//                        sndt.Rows.Add(matBC, dtPrepareInfo.Rows[0]["bin_code"].ToString());
//                        string[] ret3 = bllcommon.MatStockUp1(tranOra, sndt, curUser, dtPrepareInfo.Rows[0]["whcode"].ToString(), "出库单号:" + dtPrepareInfo.Rows[0]["outccode"].ToString(), "取消备料上架");
//                        //string[] ret3 = bllcommon.MatStockOut(tranOra, sndt, curUser, "多单合并", string.Join(",", listentry_id.ToArray()), whcode, "生产领料");
//                        if (ret3[0] != "OK")
//                        {
//                            tran.Rollback();
//                            tranOra.Rollback();
//                            Helper.Log(LogType.Info, string.Format("用户{0} 取消备料条码上架失败：{1}", curUser, ret3[0]));
//                            MessageBox.Show("取消备料条码上架失败！原因：" + ret3[0]);
//                            return;
//                        }
//                    }
//                    //删除备料记录
//                    string cancelStockRecord = string.Format(@"delete STOCK_RECORD where barcode_id='{0}'", matBC);
//                    if (DbHelperOra.ExecuteNoQueryTran(tranOra, cancelStockRecord, CommandType.Text) <= 0)
//                    {
//                        tran.Rollback();
//                        tranOra.Rollback();
//                        Helper.Log(LogType.Info, string.Format("用户{0} 取消备料失败{1}，删除备料记录STOCK_RECORD时失败", curUser, ret[0]));
//                        return;

//                    }
//                    string cancelReceiveRecord = string.Format(@"delete RECEIVE_RECORD where barcode_id='{0}'", matBC);
//                    if (DbHelperOra.ExecuteNoQueryTran(tranOra, cancelReceiveRecord, CommandType.Text) <= 0)
//                    {
//                        tran.Rollback();
//                        tranOra.Rollback();
//                        Helper.Log(LogType.Info, string.Format("用户{0} 取消备料失败,删除领料记录是失败{1}", curUser, ret[0]));
//                        return;

//                    }
//                    #endregion
//                    tran.Commit();
//                    tranOra.Commit();

//                }
//                catch (Exception ex)
//                {
//                    tran.Rollback();
//                    tranOra.Rollback();
//                    return;
//                }
//            }
//            catch (Exception ex)
//            {
//                Helper.Log(LogType.Info, string.Format("用户{0} 取消备料失败{1}", curUser, ex.Message));
//                return;
//            }

//        }

//        #endregion

//        #region 移库
//        // 半成品移库
//        private void btnMoveSP_Click(object sender, EventArgs e)
//        {
//            DataTable dt = new DataTable("SMSP");
//            dt.ExtendedProperties.Add("DestBin", txtBinSP.Text);
//            dt.Columns.Add("SN");
//            dt.Rows.Add("XB00001");
//            dt.Rows.Add("XB00002");
//            dt.Rows.Add("XB00003");
//            ShowLog("半成品移库:" + dt.ExtendedProperties["DestBin"] + ":" + dt.Rows.Count);
//            string user = "FormTest";
//            string errCode = DBOperator.Instance.SMoveSP(dt, user);
//            ShowLog(errCode == null ? "半成品移库成功" : "半成品移库故障代码:" + errCode);

//        }
//        // 成品移库
//        private void btnMovePro_Click(object sender, EventArgs e)
//        {
//            //DataTable dt = new DataTable("SMPro");
//            //dt.ExtendedProperties.Add("DestBin", txtBinPro.Text);
//            //dt.Columns.Add("SN");
//            ////dt.Rows.Add("D7112VWP130702574913120001");
//            //dt.Rows.Add("D7112VWP130702574913120002");

//            DataTable dt = new DataTable("P");
//            dt.ExtendedProperties.Add("DestBin", "EB020200");
//            dt.Columns.Add("BinProCode");
//            dt.Columns.Add("Code");
//            //dt.Rows.Add("D7112VWP130702574913120001");
//            dt.Rows.Add("EH010100", "S09-C6210HT");

//            ShowLog("成品移库:" + dt.ExtendedProperties["DestBin"] + ":" + dt.Rows.Count);
//            string user = "FormTest";
//            string errCode = DBOperator.Instance.SMovePro1(dt, user);
//            ShowLog(errCode == null ? "成品移库成功" : "成品移库故障代码:" + errCode);
//        }
//        #endregion

//        #region 盘点

//        private void btnTest7_Click(object sender, EventArgs e)
//        {
//            txtCVCond.Text = "WH='E' and PLAN_START_TIME>TO_DATE('2013-8-27','yyyy-mm-dd')";
//        }

//        private void btnTest8_Click(object sender, EventArgs e)
//        {
//            txtCVCond.Text = "WH='D' and PLAN_START_TIME>TO_DATE('2013-8-5','yyyy-mm-dd')";
//        }

//        private void btnTest9_Click(object sender, EventArgs e)
//        {
//            txtCVDetailCond.Text = "CV_NO='201308270001' and BIN='PA1001'";
//            txtCV.Text = "201308270001";
//            txtCVBin.Text = "PA1001";
//            txtCVInvCode.Text = "P01-000001";
//        }

//        private void btnTestA_Click(object sender, EventArgs e)
//        {
//            txtCVDetailCond.Text = "CV_NO='201309050001' and BIN='SB1002'";
//            txtCV.Text = "201309050001";
//            txtCVBin.Text = "SB1002";
//            txtCVInvCode.Text = "S01-000001";
//        }

//        private void btnQueryCV_Click(object sender, EventArgs e)
//        {
//            string cond = txtCVCond.Text;
//            ShowLog("查询盘点单:" + cond);
//            DataTable dt = DBOperator.Instance.QueryCV(cond);
//            ShowLog(dt == null ? "盘点单不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnQueryCVDetail_Click(object sender, EventArgs e)
//        {
//            string cond = txtCVDetailCond.Text;
//            ShowLog("查询盘点单明细:" + cond);
//            DataTable dt = DBOperator.Instance.QueryCVDetail(cond);
//            ShowLog(dt == null ? "盘点单明细不存在" : "返回结果:" + dt.Rows.Count);
//            dataGridView1.DataSource = dt;
//        }

//        private void btnCVData_Click(object sender, EventArgs e)
//        {
//            ShowLog("提交盘点数据:");
//            //string cvNo = txtCV.Text;
//            //string bin = txtCVBin.Text;
//            //string material = txtCVInvCode.Text;
//            //int qty = Convert.ToInt32(txtCVCnt.Text);
//            //string ret = DBOperator.Instance.UpdateCVData(cvNo, bin, material, qty);

//            DataTable dt = new DataTable("CVData");
//            dt.ExtendedProperties.Add("CV_NO", txtCV.Text);
//            dt.ExtendedProperties.Add("BIN", txtCVBin.Text);
//            dt.Columns.Add("CODE", typeof(string));
//            dt.Columns.Add("QTY", typeof(int));
//            //dt.Rows.Add("P01-000001", txtCVCnt.Text); //-成品
//            //dt.Rows.Add("P01-000002", txtCVCnt.Text);
//            // dt.Rows.Add("S01-000001", txtCVCnt.Text); //-半成品

//            dt.Rows.Add(txtCVInvCode.Text, txtCVCnt.Text);

//            string ret = DBOperator.Instance.UpdateCVData(dt, "FormTest");
//            ShowLog("返回结果:" + (ret ?? "OK"));
//        }
//        #endregion

//        private void btnGetMoSpCnt_Click(object sender, EventArgs e)
//        {
//            DataTable dt = _qry.GetMOSemiproCnt(txtMoDID2.Text);
//            if (dt.ExtendedProperties["ErrCode"].ToString() == "OK")
//                ShowLog("半成品数量:" + dt.ExtendedProperties["Cnt"]);
//            else
//                ShowLog("半成品数量查询失败,错误代码:" + dt.ExtendedProperties["ErrCode"]);
//        }




//        private void btnQuery_Click(object sender, EventArgs e)
//        {
//            string sql = txtSql.Text;
//            DataTable dt = DBOperator.Instance.Query(sql);
//            dataGridView1.DataSource = dt;
//            ShowLog("查询结果:" + (dt == null ? "null" : dt.Rows.Count.ToString()));
//        }

//        private void btnExec_Click(object sender, EventArgs e)
//        {
//            string sql = txtSql.Text;
//            int affectRow = DBOperator.Instance.Exec(sql);
//            ShowLog("执行结果:" + affectRow.ToString());
//        }

//        private void btnTest1_Click(object sender, EventArgs e)
//        {
//            _so.UpdateUnScanSOPkgDetail();  //更新未初始化扫描明细
//        }

//        private void btnTest2_Click(object sender, EventArgs e)
//        {
//            PrinterHelper.Instance.QueryPrinterName();

//            this.dataGridView1.DataSource = PrinterHelper.Instance.PrtName;
//        }



//        #region 同步物料
//        private void timer2_Tick(object sender, EventArgs e)
//        {
//            int hh = DateTime.Now.Hour;//获取当前日期小时部分
//            if (hh != 3)
//            {
//                return;
//            }
//            timer2.Enabled = false;

//            ShowLog("同步物料信息开始……");

//            //获取ERP存货档案
//            string strSqlErp = "select cInvCode, cInvName, cInvStd ,cDefWareHouse from Inventory";
//            DataTable dt = SqlDBHelper.Query(strSqlErp);
//            for (int i = 0; i < dt.Rows.Count; i++)
//            {

//                string cInvCode = dt.Rows[i]["cInvCode"].ToString();
//                string cInvName = dt.Rows[i]["cInvName"].ToString();
//                string cInvStd = dt.Rows[i]["cInvStd"].ToString().Replace("'", " ");
//                string wh = dt.Rows[i]["cDefWareHouse"].ToString();
//                string error = string.Format(cInvCode + " " + cInvName + " " + cInvStd + " " + wh);
//                //Helper.Log(LogType.Warn, string.Format("同步物料代码:({0})", error));
//                try
//                {
//                    //检查物料代码是否存在
//                    string sqlExists = string.Format("select * from MATERIAL_INFO where MATERIAL_CODE='{0}'", cInvCode);

//                    DataTable ret = DbHelperOra.QueryFirstTable(sqlExists);
//                    if (ret != null && ret.Rows.Count > 0)
//                    {
//                        //修改名称规格等信息
//                        string sqlUpdate = string.Format(@"update MATERIAL_INFO set material_name='{0}',product_type='{1}',kf_period='360' where material_code='{2}' ", cInvName, cInvStd, cInvCode);
//                        int row = DbHelperOra.ExecuteSql(sqlUpdate, new OracleParameter[0]);
//                    }
//                    else
//                    {
//                        //插入新数据
//                        string sqlINSERT = string.Format(@"INSERT INTO MATERIAL_INFO (material_code, 
//                                               material_name, 
//                                               product_type, 
//                                               kf_period) 
//                                               VALUES ('{0}','{1}','{2}','{3}')", cInvCode, cInvName, cInvStd, "360");
//                        int row = DbHelperOra.ExecuteSql(sqlINSERT, new OracleParameter[0]);
//                    }
//                }
//                catch (Exception ex)
//                {
//                    //MessageBox.Show(ex.Message);
//                    Helper.Log(LogType.Warn, string.Format("同步物料代码:({0})", ex.Message + error));
//                    timer2.Enabled = false;
//                }
//            }


//            timer2.Enabled = true;
//        }
//        #endregion


//        private void button2_Click(object sender, EventArgs e)
//        {
//            DataTable dt = new DataTable();
//            dt.Columns.Add("Qty", typeof(double));
//            dt.Columns.Add("IssQty", typeof(double));
//            dt.Columns.Add("Define30", typeof(double));
//            dt.Rows.Add(100, 50, 50);
//            dt.Rows.Add(100, 0, 50);
//            dt.Rows.Add(100, 50, 0);
//            dt.Rows.Add(100, 100, 0);
//            double needQty = 100;
//            for (int i = 0; i < dt.Rows.Count; i++)
//            {
//                if (needQty <= 0)
//                {
//                    break;
//                }
//                double IssQty = dt.Rows[i]["IssQty"].ToString() == "" ? 0 : double.Parse(dt.Rows[i]["IssQty"].ToString());  //已备料
//                double checkQTY = dt.Rows[i]["Define30"].ToString() == "" ? 0 : double.Parse(dt.Rows[i]["Define30"].ToString());  //已清点数
//                double Qty = double.Parse(dt.Rows[0]["Qty"].ToString());//计划数量
//                //计划数-已清点数=未备料数
//                if (Qty == checkQTY) //备完不需更新
//                    continue;
//                if (Qty == IssQty)
//                    continue;
//                if (needQty == 0)
//                    continue;
//                double curQTY = Qty - IssQty - checkQTY;
//                if (curQTY == 0)
//                    continue;
//                if (needQty <= curQTY)
//                {//本次清点数<=当前行未备料数

//                    double ddd = needQty + checkQTY;
//                    //ret = _db.BOMPickSave(entryID, needQty + checkQTY, curUser);//清点数=已清点+本次清点数
//                    //_db.InsertBOMPickSave(entryID, needQty, matBC, SoCode);
//                    //listentry_id.Add(entryID);
//                    break;
//                }
//                else
//                {
//                    double ppp = curQTY + checkQTY;
//                    //ret = _db.BOMPickSave(entryID, curQTY + checkQTY, curUser);//清点数=本次清点数-未备料数
//                    //_db.InsertBOMPickSave(entryID, curQTY, matBC, SoCode);
//                    //合并备料总数-当前bom备料=剩下的数量
//                    needQty = needQty - curQTY;
//                    //listentry_id.Add(entryID);
//                }
//                //if (ret[0] != "OK")
//                //    Helper.Log(LogType.Info, string.Format("用户{0} 备料清点结果{1}", curUser, ret[0]));
//            }

//        }

//        private void btnGetPrepareInfo_Click(object sender, EventArgs e)
//        {
//            //BLLMOPickSave bllMOPickSave = new BLLMOPickSave();
//            //DataTable dt = bllMOPickSave.GetDataStockRecord("张武东", 1, "01", "1030100009");
//            #region 解决生单顺序问题
//            string querySql = @"
//select a.stock_qty as 出库数,a.allocateid as 行号,b.mat_code as 物料代码,b.product_batchno as 生产批次,a.pick_time
//  from stock_record  a left join  barcode_mat b  on  a.barcode_id=b.barcode_id where b.product_batchno is null  and a.allocateid='1000404349'";
//            try
//            {

//                DataTable dt = DbHelperOra.QueryTable(querySql);//获取带备料日期的数据
//                DataTable dt1 = new DataTable();
//                dt1.Columns.Add("出库数", typeof(double));
//                dt1.Columns.Add("行号", typeof(string));
//                dt1.Columns.Add("物料代码", typeof(string));
//                dt1.Columns.Add("生产批次", typeof(string));
//                //同一个工单，同一个批次汇总数量
//                for (int i = 0; i < dt.Rows.Count; i++)
//                {
//                    #region 非批次管控的物料 //如果批次为空，那么就判断行号相等即可
//                    if (string.IsNullOrEmpty(dt.Rows[i]["生产批次"].ToString()))
//                    {
//                        //判断是否已经汇总过这个批次号
//                        if (dt1.Select(string.Format("行号='{0}' and 生产批次=''", dt.Rows[i]["行号"].ToString())).Length > 0)
//                        {
//                            continue;
//                        }
//                        double num = 0;
//                        //一定会找到这个东西，自己在自己的集合里面找，肯定有
//                        DataRow[] dr = dt.Select(string.Format("行号='{0}' and 生产批次 is null", dt.Rows[i]["行号"].ToString()));
//                        //汇总数量                   
//                        foreach (DataRow item in dr)
//                        {
//                            num += (double)item["出库数"];
//                        }
//                        dt1.Rows.Add(num, dt.Rows[i]["行号"].ToString(), "2110200096", "");
//                    }
//                    #endregion
//                    #region 批次管控的物料 批次一定非空
//                    else
//                    {
//                        //判断是否已经汇总过这个批次号
//                        if (dt1.Select(string.Format("行号='{0}' and 生产批次='{1}'", dt.Rows[i]["行号"].ToString(), dt.Rows[i]["生产批次"].ToString())).Length > 0)
//                        {
//                            continue;
//                        }
//                        double num = 0;
//                        //一定会找到这个东西，自己在自己的集合里面找
//                        DataRow[] dr = dt.Select(string.Format("行号='{0}' and 生产批次='{1}'", dt.Rows[i]["行号"].ToString(), dt.Rows[i]["生产批次"].ToString()));
//                        //汇总数量                   
//                        foreach (DataRow item in dr)
//                        {
//                            num += (double)item["出库数"];
//                        }
//                        dt1.Rows.Add(num, dt.Rows[i]["行号"].ToString(), "2110200096", dt.Rows[i]["生产批次"].ToString());

//                    }
//                    #endregion
//                }
//            }
//            catch (Exception ex)
//            {
//                Helper.Log(LogType.Info, string.Format("获取扫描记录失败：SQL：{0}原因：{1}", querySql, ex.Message));
//                throw ex;
//            }
//            #endregion
//        }

//        /// <summary>
//        /// 条码下架
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private void btnStockOut_Click(object sender, EventArgs e)
//        {
//            BLLCommon bllCommon = new BLLCommon();
//            OracleTransaction tranOra = DbHelperOra.BeginTransaction();
//            string[] mat = { txbBarcodeID.Text.Trim().ToUpper() };
//            mat = bllCommon.ProcMatStockOut(tranOra, mat, "库存调整下架", "admin", "库存调整", "761", "库存调整");
//            if (mat[0] == "OK")
//            {
//                tranOra.Commit();
//            }
//            else
//            {
//                tranOra.Rollback();
//            }
//        }
//        /// <summary>
//        /// 根据数据库表创建XML
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private void btnCreateXML_Click(object sender, EventArgs e)
//        {
//            try
//            {
//                //1.获取数据库中待接收的数据,一次提交一个订单的信息
//                string sql1 = string.Format(@"select wms_id, source_system, org_id, po_header_id, 
//po_number, po_line_num, po_dis_id, receive_num, receive_by, oe_header_id, oe_number, 
//oe_line_id, oe_line_num, organization_id, item_code, tran_qty, item_unit, tran_type, 
//tran_date, subinventory, location_id, remarks, attribute1, attribute2, attribute3, 
//attribute4, attribute5
// from PO_RECEIVE_TASK
//where RECEIVE_NUM is null and TRAN_TYPE='采购接收' and USE_STATE='0' 
//and po_header_id in( select po_header_id from ( select po_header_id from PO_RECEIVE_TASK  where  USE_STATE='0' order by WMS_ID asc ) where rownum=1)");
//                DataTable dt = DbHelperOra.QueryTable(sql1);
//                //2.根据数据创建XML
//                string xml = CreateXML(dt);
//                //3.调用接口
//                string postPath = "http://dev.coslight-zh.com:8020/webservices/rest/PO_TRANSACTION_SOA_PKG/MAIN/";//采购接收
//                //提交时间
//                DateTime dtStart = DateTime.Now;
//                string result = WebServiceHelper.PostJson(postPath, xml);
//                //结果返回时间
//                DateTime dtEnd = DateTime.Now;
//                //耗时
//                TimeSpan ts = dtEnd.Subtract(dtStart);
//                result = "提交时间：" + dtStart + "\r返回时间：" + dtEnd + "\r耗时：" + ts + "\r" + result;
//                //将数据写入数据库
//                JObject json1 = (JObject)JsonConvert.DeserializeObject(result);
//                string array = json1["OutputParameters"]["L_DATA"].ToString();
//                JObject resultObject = (JObject)JsonConvert.DeserializeObject<JObject>(array);
//                string errorCode = resultObject["errorCode"].ToString();
//                string errorMessage = resultObject["errorMessage"].ToString();

//            }
//            catch (Exception ex)
//            {
//                MessageBox.Show(ex.Message);
//            }
//        }
//        /// <summary>
//        /// 根据数据表创建XML
//        /// </summary>
//        /// <param name="dt"></param>
//        private string CreateXML(DataTable dt)
//        {
//            try
//            {
//                //创建对象
//                XDocument xmlDoc = new XDocument();
//                //编写文档定义
//                XDeclaration xdec = new XDeclaration("1.0", "utf-8", "yes");
//                //这步和XmlDocument不一样，XmlDocument是添加,而这是赋值
//                xmlDoc.Declaration = xdec;
//                //创建根节点
//                XElement rootElement = new XElement("DATA");
//                xmlDoc.Add(rootElement);
//                for (int i = 0; i < dt.Rows.Count; i++)
//                {
//                    //创建一个header元素
//                    XElement header = new XElement("HEADER");
//                    //元素赋值
//                    for (int j = 0; j < dt.Columns.Count; j++)
//                    {
//                        header.SetElementValue(dt.Columns[j].ColumnName.ToUpper(), CNToUnicode(dt.Rows[i][dt.Columns[j].ColumnName.ToUpper()].ToString()));
//                        ///做销售订单挑库发运时，TRAN_DATE时间必须比EBS服务器的时间小
//                        //if (dt.Columns[j].ColumnName.ToUpper() == "TRAN_DATE")
//                        //    header.SetElementValue(dt.Columns[j].ColumnName.ToUpper(), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
//                    }
//                    rootElement.Add(header);
//                }
//                return xmlDoc.ToString().Replace("\r\n", "");
//            }
//            catch (Exception ex)
//            {
//                throw ex;
//            }
//        }

//        /// <summary>
//        /// 字符串转Unicode编码,ASCII码表中的字符不转
//        /// </summary>
//        /// <param name="str"></param>
//        /// <returns></returns>
//        public static string CNToUnicode(string str)
//        {
//            char[] chars = str.ToCharArray();
//            StringBuilder unicodeStr = new StringBuilder("");
//            for (int i = 0; i < chars.Length; i++)
//            {
//                if (chars[i] >= 0x0000 && chars[i] <= 0x007f)
//                {
//                    unicodeStr.Append(chars[i]);
//                }
//                else
//                {
//                    string hexB = Convert.ToString(Convert.ToInt32(chars[i]), 16);
//                    unicodeStr.Append("\\\\u");
//                    unicodeStr.Append(hexB);
//                }
//            }
//            return unicodeStr.ToString();
//        }
//    }



//}
